#include "BombaThreadSingle.h"

BombaThreadSingle::BombaThreadSingle(Personaje* agresor, Casilla* casillaAtacada, int danioBase, Escenario* escenario){
		this->agresor = agresor;
		this->casillaAtacada = casillaAtacada;
		this->danioBase = danioBase;
		this->escenario = escenario;
}

BombaThreadSingle::~BombaThreadSingle(){}

void BombaThreadSingle::run() {

	//crea la entidad bomba y la muestra
	cout<<"ENTRO EN LA BOMBA"<<endl;
	Entidad* bomba= new Entidad();
	bomba->setCoordenadas(casillaAtacada->getX(),casillaAtacada->getY());
	TipoEntidad* tipoBomba = this->escenario->getTiposEntidades()["bomba"];
	bomba->setTipo(tipoBomba);
	cout << "TIPO ENTIDAD BOMBA: " << tipoBomba->getNombre() << endl;
	bomba->setAccion("bomba_default");
	escenario->agregarEntidad(bomba);
	//escenario->getEntidades().push_back(bomba);
	bomba->setCuadroActual(0);


	//casillaAtacada->getEntidades().push_back(bomba);
	casillaAtacada->agregarEntidad(bomba);


	SDL_Delay(4900);
	int rango = RANGO_BOMBA;

	for(int i = casillaAtacada->getX() - rango; i <= casillaAtacada->getX() + rango; i++){
		for(int j = casillaAtacada->getY() - rango; j <= casillaAtacada->getY() + rango; j++){
			if(i>=0 && j>=0 && i<=escenario->getAncho() && j<=escenario->getAlto()){
				Casilla* casillaActual = escenario->getCasilla(i,j);
				list<Entidad*> entidadesAtacadas = casillaActual->getEntidades();
				entidadesAtacadas.insert(entidadesAtacadas.end(), casillaActual->getPersonajes().begin(),casillaActual->getPersonajes().end());
				for(list<Entidad*>::iterator it = entidadesAtacadas.begin(); it != entidadesAtacadas.end(); it++){
					Entidad* victima = *it;
					cout<<"Posible victima "<< victima->getTipo()->getNombre()<<endl;
					if(victima->getTipo()->esEsGolpeable() &&
							victima->getTipo()->getNombre().compare("bomba")!=0){
						int vidaVictimaRemanente = victima->getVida() - danioBase;
						vidaVictimaRemanente = vidaVictimaRemanente >= 0 ? vidaVictimaRemanente : 0;
						victima->setVida(vidaVictimaRemanente);
					}
				}
			}
		}
	}

	casillaAtacada->removerEntidad(bomba);
	escenario->removerEntidad(bomba);
	delete bomba;

	Entidad* explota= new Entidad();
	explota->setCoordenadas(casillaAtacada->getX(),casillaAtacada->getY());
	TipoEntidad* explosion = this->escenario->getTiposEntidades()["explota"];
	explota->setTipo(explosion);
	explota->setCuadroActual(0);
	explota->setAccion("explota_default");
	escenario->agregarEntidad(explota);
	casillaAtacada->agregarEntidad(explota);
	SDL_Delay(2100);

	casillaAtacada->removerEntidad(explota);
	escenario->removerEntidad(explota);
	//Remover la entidad bomba
}
